import Vue from 'vue'
import VueRouter from 'vue-router'
// 导入路由所需的组件
import Home from '@/views/Home'
import Login from '@/views/Login'
import Users from '@/components/Users'
import Rules from '@/components/Rules'
import Rights from '@/components/Rights'
import Goods from '@/components/Goods'
import Params from '@/components/Params'
import Cate from '@/components/Cate'
import Dingdan from '@/components/Dingdan'
import Data from '@/components/Data'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    redirect: '/home'
  },
  {
    path: '/login',
    name: 'login',
    component: Login
  },
  {
    path: '/home',
    name: 'home',
    component: Home,
    children: [
      {
        path: '/users',
        name: 'users',
        component: Users
      },
      {
        path: '/rights',
        name: 'rights',
        component: Rules
      },
      {
        path: '/roles',
        name: 'roles',
        component: Rights
      },
      {
        path: '/goods',
        name: 'goods',
        component: Goods
      },
      {
        path: '/params',
        name: 'params',
        component: Params
      },
      {
        path: '/categories',
        name: 'categories',
        component: Cate
      },
      {
        path: '/orders',
        name: 'orders',
        component: Dingdan
      },
      {
        path: '/reports',
        name: 'reports',
        component: Data
      }
    ]
  }
]

/*
  项目中
    + 每一次打开电脑, 只能打开去到登录路由
    + 其他所有路由, 必须登录后才能打开
    + 需要对每一个 路由 进行登录验证
    + 例子:
      => 你要打开 /home 路由, 那么验证你是否登录过
      => 如果登录过, 那么打开
      => 如果没有登录过, 那么去到 /login 路由

  如何实现验证
    + 方案1: 每一个组件逐个书写
    + 方案2: 全局路由前置守卫
      => 当你要进入这个路由的时候, 会触发前置守卫

  如何验证登录过
    + 每当登录过以后, 我把 token 存储在 sessionStorage 内
    + 如何验证登录过, 只要 sessionStorage 内头 token, 就表示当前打开浏览器的本次是登录过的
      => 如果没有 token 信息, 表示你至少关闭过浏览器的状态
      => 或者说是本次打开浏览器并没有登录
    + token 验证
      => 前端验证 token 有没有, 作用是为了是否打开路由展示页面
      => 后端验证 token 对不对, 作用是为了服务器是否给你返回数据

  注意:
    + 将来你一旦登录以后, 一定要存储一个 token 信息在 sessionStorage 内
*/

const router = new VueRouter({
  routes
})

// 书写全局路由前置守卫
router.beforeEach((to, from, next) => {
  // 1. 如果你去的是 /login 路由, 需要验证码 ?
  if (to.path === '/login') return next()

  // 2. 验证登录过
  const token = window.sessionStorage.getItem('token')

  // 3. 验证 token 是否存在
  if (token) return next()

  // 代码来到这里, 表示 token 不存在, 应该让你跳转回到 /login
  // 如果你本身就是从 /login 去到 /users, 那么不需要跳转回来, 不过去就行了
  // 如果你不是从 /login 去到 /users, 那么就回到 /login
  if (from.path !== '/login') router.push('/login')
})

export default router
